//
//  EmoticonPackage.swift
//  01-表情键盘
//
//  Created by 002 on 15/10/24.
//  Copyright © 2015年 002. All rights reserved.
//

import UIKit

// MARK: - 表情包模型
class EmoticonPackage: NSObject {
    
    /// 表情包所在路径
    var id: String?
    /// 表情包的名称，显示在 toolbar 中
    var group_name_cn: String?
    /// 表情数组 - 能够保证，在使用的时候，数组已经存在，可以直接追加数据
    lazy var emoticons = [Emoticon]()
    
    init(dict : [String : AnyObject]) {
        super.init()
        
        id = dict["id"] as? String
        group_name_cn = dict["group_name_cn"] as? String
        
        // 1. 获取字典的数组
        if let array = dict["emoticons"] as? [[String : AnyObject]] {
            // 2. 遍历数组
            var index = 0
            for var d in array {
                // 1> 判断png是否有值
                if let png = d["png"] as? String,dir = id {
                    // 2> 拼接路径,重置字典的值
                    d["png"] = dir + "/" + png                    
                }
                emoticons.append(Emoticon.init(dict: d))
                
                index++
                if index == 20 {
                    // 每隔20个添加一个删除按钮
                    emoticons.append(Emoticon.init(isRemoved: true))
                    index = 0
                }
            }
        }
        // 添加空白表情
        appendEmptyEmoticon()
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    /// MARK: - 添加添加空白表情 在表情数组末尾
    private func appendEmptyEmoticon() {
        
        // 取表情的余数
        let count = emoticons.count % 21
        
        // 只有最近和默认需要添加空白表情
        if emoticons.count > 0 && count == 0 {
            return
        }
        
        print("\(group_name_cn) 剩余表情数量 \(count)")
        // 添加空白表情
        for _ in count..<20 {
            emoticons.append(Emoticon(isEmpty: true))
        }
        
        // 最末尾添加一个删除按钮
        emoticons.append(Emoticon(isRemoved: true))
    }

    
    override var description: String {
        let keys = ["id", "group_name_cn", "emoticons"]
        
        return dictionaryWithValuesForKeys(keys).description
    }
}
